package com.grandt.model.database.manager;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import com.grandt.model.beans.jugadores.FechaBean;
import com.grandt.model.configuration.ConfigurationBean;
import com.grandt.model.exceptions.BuscarDatosException;
import com.grandt.model.exceptions.ModifyDataException;

public class DataBaseFecha extends ManagerDataBase {

	public DataBaseFecha(ConfigurationBean configuration) {
		super(configuration);
	}

	@Override
	protected String getStrInsert() {
		String query="INSERT INTO FECHAS(ID,ID_JUGADOR,PUNTO)" +
				" VALUES (?,?,?)";
		return query;
	}

	@Override
	protected void insertParameters(PreparedStatement prst,Object o) throws SQLException {
		FechaBean fecha = (FechaBean)o;
		prst.setString(1, fecha.getFecha());
		prst.setInt(2, fecha.getIdJugador());
		prst.setInt(3, fecha.getPunto());
		//prst.setString(3, equipoJugador.getApellidoJugador());
	}
	@Override
	protected List<Object> getResult(ResultSet result) {
		return null;
	}
	@Override
	protected String getStrQuery() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected void queryParameters(PreparedStatement prst, Object o) {
		// TODO Auto-generated method stub
		
	}

	public void modify(FechaBean fechaBean) throws ModifyDataException {
		try {
			String query = "UPDATE FECHAS SET " +
				" PUNTO = "+fechaBean.getPunto()+
				" WHERE ID='"+fechaBean.getFecha()+"'" +
						" AND ID_JUGADOR="+fechaBean.getIdJugador();
			PreparedStatement prst;
			prst = connection.prepareStatement(query);
			prst.execute();
			prst.getConnection().commit();
			prst.close();
		} catch (SQLException e) {
			throw new ModifyDataException(e);
		}
	}

	public Map<String, Integer> getFechas(int idJugador) throws BuscarDatosException {
		Map<String, Integer> fechas = new HashMap<String, Integer>();
		try {

			String query = "Select * from FECHAS WHERE ID_JUGADOR="+idJugador;
			PreparedStatement prst;
			prst = connection.prepareStatement(query);
			ResultSet result = prst.executeQuery();
			while (result.next()) {
				setFechas(fechas,result);
				//fechas.put(result.getString("ID"), result.getInt("PUNTO"));
				
			}
			prst.close();
		} catch (SQLException e) {
			throw new BuscarDatosException(e);
		}
		return fechas;
	}

	private void setFechas(Map<String, Integer> fechas, ResultSet result) throws SQLException {
		Integer puntos=result.getInt("PUNTO");
		if(fechas.containsKey(result.getString("ID"))){
			puntos += fechas.get(result.getString("ID"));		
		}
		fechas.put(result.getString("ID"),puntos);		
	}

	public List<String> getFechasDisponibles() throws BuscarDatosException {
		
		List<String> fechas = new LinkedList<String>();
		try {

			String query = "Select distinct ID from FECHAS ";
			PreparedStatement prst;
			prst = connection.prepareStatement(query);
			ResultSet result = prst.executeQuery();
			while (result.next()) {
				fechas.add(result.getString("ID"));
				
			}
			prst.close();
		} catch (SQLException e) {
			throw new BuscarDatosException(e);
		}
		return fechas;
	}

}
